package cc.rengu.igas.channel.nucc.core.realize;

import cc.rengu.igas.channel.nucc.facade.request.*;
import cc.rengu.igas.channel.nucc.facade.response.*;

/**
 * 网联清算平台接口
 */
public interface NuccService {
    /**
     * 流水号申请
     *
     * @param transSeqNoApplyRequest
     * @return
     * @throws Exception
     */
    TransSeqNoApplyResponse transSeqNoApply(TransSeqNoApplyRequest transSeqNoApplyRequest) throws Exception;

    /**
     * 快捷身份认证及签约
     *
     * @param verifySignAcqRequest
     * @return
     * @throws Exception
     */
    VerifySignAcqResponse verifySignQuick(VerifySignAcqRequest verifySignAcqRequest) throws Exception;

    /**
     * 网关身份认证及签约
     *
     * @param verifySignAcqRequest
     * @return
     * @throws Exception
     */
    VerifySignGwResponse verifySignGw(VerifySignAcqRequest verifySignAcqRequest) throws Exception;

    /**
     * 商业委托签约（线下）
     *
     * @param businessAuthSignAcqRequest
     * @return
     * @throws Exception
     */
    CommonResponse businessOffAuthSign(BusinessAuthSignAcqRequest businessAuthSignAcqRequest) throws Exception;

    /**
     * 商业委托签约（网关）
     *
     * @param businessAuthSignAcqRequest
     * @return
     * @throws Exception
     */
    VerifySignGwResponse businessGwAuthSign(BusinessAuthSignAcqRequest businessAuthSignAcqRequest) throws Exception;

    /**
     * 商业委托签约（快捷）
     *
     * @param businessAuthSignAcqRequest
     * @return
     * @throws Exception
     */
    BusiAuthSignQuickAcqResponse businessAuthSignQuick(BusinessAuthSignAcqRequest businessAuthSignAcqRequest) throws Exception;


    /**
     * 解约
     *
     * @param rescindSignAcqRequest
     * @return
     * @throws Exception
     */
    RescindSignAcqResponse rescindSign(RescindSignAcqRequest rescindSignAcqRequest) throws Exception;

    /**
     * 协议查询
     *
     * @param signStateQueryAcqRequest
     * @return
     * @throws Exception
     */
    SignStateQueryAcqResponse signStateQuery(SignStateQueryAcqRequest signStateQueryAcqRequest) throws Exception;

    /**
     * 协议支付
     *
     * @param agreementPayAcqRequest
     * @return
     * @throws Exception
     */
    CommonTransAcqResponse agreementPay(AgreementPayAcqRequest agreementPayAcqRequest) throws Exception;

    /**
     * 网关支付
     *
     * @param gwPayApplyRequest
     * @return
     * @throws Exception
     */
    CommonTransAcqResponse gwPayApply(GwPayApplyRequest gwPayApplyRequest) throws Exception;

    /**
     * 商户付款
     *
     * @param mchntPaymentAcqRequest
     * @return
     * @throws Exception
     */
    CommonTransAcqResponse mchntPayment(MchntPaymentAcqRequest mchntPaymentAcqRequest) throws Exception;

    /**
     * 退款申请
     *
     * @param refundPaymentAcqRequest
     * @return
     * @throws Exception
     */
    CommonTransAcqResponse refundPayment(RefundPaymentAcqRequest refundPaymentAcqRequest) throws Exception;

    /**
     * 交易状态查询
     *
     * @param transStateQueryAcqRequest
     * @return
     * @throws Exception
     */
    TransStateQueryAcqResponse transStateQuery(TransStateQueryAcqRequest transStateQueryAcqRequest) throws Exception;

    /**
     * 非正常终态查询
     *
     * @param abnormalStateQueryAcqRequest
     * @return
     * @throws Exception
     */
    AbnormalStateQueryAcqResponse abnormalStateQuery(AbnormalStateQueryAcqRequest abnormalStateQueryAcqRequest) throws Exception;

    /**
     * 交易详情查询
     *
     * @param transDetailQueryAcqRequest
     * @return
     * @throws Exception
     */
    TransDetailQueryAcqResponse transDetailQuery(TransDetailQueryAcqRequest transDetailQueryAcqRequest) throws Exception;
}
